Tweak gbfeof to become compatible with feof.
authoroliskoli <oliskoli>
Mon, 27 Nov 2006 23:44:53 +0000 (23:44 +0000)
committeroliskoli <oliskoli>
Mon, 27 Nov 2006 23:44:53 +0000 (23:44 +0000)
gbfile.c

index 0916f63d0ad3bd33b3a7e3ab00889b258d0952a8..0639191dc4da088994cec65755e64cf19fb381e9 100644 (file)
--- a/gbfile.c
+++ b/gbfile.c
@@ -437,7 +437,25 @@ gbfeof(gbfile *file)
 {
        if (file->gzapi) {
 #if !ZLIB_INHIBITED
-               return gzeof(file->handle.gz);
+               int res = gzeof(file->handle.gz);
+               
+               if (!res) {
+                       signed char test;
+                       int len = gzread(file->handle.gz, &test, 1);
+                       if (len == 1) {
+                               /* No EOF, put the single byte back into stream */
+                               gzungetc(test, file->handle.gz);
+                       }
+                       else {
+                               /* we are at the end of the file */
+                               if (global_opts.debug_level > 0) {
+                                       /* now gzeof() should return 1 */
+                                       is_fatal(!gzeof(file->handle.gz), "zlib gzeof error!\n");
+                               }
+                               res = 1;
+                       }
+               }
+               return res;
 #else
                fatal(NO_ZLIB);
                return 0;